www.gusucode.com > VC++ 获取宽带ADSL的账号与密码程序 > VC++ 获取宽带ADSL的账号与密码程序/code/until.cpp
#if !defined(AFX_UNTIL_CPP_INCLUDED) #define AFX_UNTIL_CPP_INCLUDED #include <windows.h> #include <process.h> #include <Tlhelp32.h> #include <Wtsapi32.h> #include <wininet.h> #pragma comment(lib,"Wtsapi32.lib") #include"until.h" DWORD GetProcessID(LPCTSTR lpProcessName){ DWORD RetProcessID=0; HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32*info=new PROCESSENTRY32; info->dwSize=sizeof(PROCESSENTRY32); if(Process32First(handle,info)){ if(_tcsicmp(info->szExeFile,lpProcessName)==0){ RetProcessID=info->th32ProcessID; return RetProcessID; } while(Process32Next(handle,info)!=FALSE){ if(_tcsicmp(info->szExeFile,lpProcessName)==0){ RetProcessID=info->th32ProcessID; return RetProcessID; } } } return RetProcessID; } LPTSTR GetLogUserXP(){ LPTSTR szLogName=NULL; DWORD dwSize=0; if(WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,WTS_CURRENT_SESSION,WTSUserName,&szLogName,&dwSize)){ LPTSTR lpUser=new TCHAR[256]; _tcscpy(lpUser,szLogName); WTSFreeMemory(szLogName); return lpUser; }else return NULL; } LPTSTR GetLogUser2K(){ DWORD dwProcessID=GetProcessID(_T("explorer.exe")); if(!dwProcessID)return NULL; BOOL fResult=FALSE; HANDLE hProc=NULL; HANDLE hToken=NULL; TOKEN_USER*pTokenUser=NULL; LPTSTR lpUserName=NULL; __try{ // Open the process with PROCESS_QUERY_INFORMATION access hProc=OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID); if(hProc==NULL)__leave; fResult=OpenProcessToken(hProc,TOKEN_QUERY,&hToken); if(!fResult)__leave; DWORD dwNeedLen=0; fResult=GetTokenInformation(hToken,TokenUser,NULL,0,&dwNeedLen); if(dwNeedLen>0){ pTokenUser=(TOKEN_USER*)new BYTE [dwNeedLen]; fResult=GetTokenInformation(hToken,TokenUser,pTokenUser,dwNeedLen,&dwNeedLen); if(!fResult)__leave; }else __leave; SID_NAME_USE sn; TCHAR szDomainName[MAX_PATH]; DWORD dwDmLen=MAX_PATH; DWORD nNameLen=256; lpUserName=new TCHAR[256]; fResult=LookupAccountSid(NULL,pTokenUser->User.Sid,lpUserName,&nNameLen, szDomainName,&dwDmLen,&sn); }__finally{ if(hProc)::CloseHandle(hProc); if(hToken)::CloseHandle(hToken); if(pTokenUser)delete[] pTokenUser; } return lpUserName; } LPTSTR GetCurrentLoginUser(){ OSVERSIONINFOEX OsVerInfo; ZeroMemory(&OsVerInfo,sizeof(OSVERSIONINFOEX)); OsVerInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX); if(!GetVersionEx((OSVERSIONINFO*)&OsVerInfo)){ OsVerInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); if(!GetVersionEx((OSVERSIONINFO*)&OsVerInfo))return NULL; } if(OsVerInfo.dwMajorVersion==5&&OsVerInfo.dwMinorVersion==0)return GetLogUser2K(); else return GetLogUserXP(); } #endif// !defined(AFX_UNTIL_CPP_INCLUDED)